home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / MacGzip 1.0 / source / Mac / Work.c < prev    next >
Text File  |  1995-09-08  |  2KB  |  95 lines

  1. /*
  2.  * Work.c
  3.  * (C) SPDsoft, August 29, 1995
  4.  *
  5.  * A 'to do' work FIFO
  6.  *
  7.  */
  8.  
  9.  
  10. /*
  11.  * THINK_C 8.0 extra includes (Not in MacHeaders)
  12.  */
  13.  
  14. #include "GzErrors.h"
  15. #include "Work.h"
  16. #define MAX_WORKS    512
  17.  
  18. /*
  19.  * Globals
  20.  */
  21.  
  22. int                w_start        = 0; /* -1 */
  23. int                w_end        = 0;
  24.  
  25. TWorkHandle        Work[MAX_WORKS];
  26.  
  27. /*
  28.  * Prototypes
  29.  */
  30. static int next_w ( int i );
  31.  
  32. /************************************************************************************
  33.  */
  34.  
  35. int new_work( short km, short o, Boolean prompt, FSSpec *fs)
  36. {
  37.     if ( w_start == ( w_end = next_w ( w_end )))
  38.         return kWorkEndErr;
  39.     
  40.     if ( nil == ( Work[w_end] = (TWorkHandle) NewHandle ( sizeof ( TWork )) ))
  41.     {
  42.         err = MemError();
  43.         return kWorkNoMemErr;
  44.     }
  45.     
  46.     (*Work[w_end])->KeysMode    = km;
  47.     (*Work[w_end])->Op            = o;
  48.     (*Work[w_end])->Prompt        = prompt;
  49.     (*Work[w_end])->fs            = *fs;
  50.  
  51.     return 0;
  52. }
  53.  
  54. int get_work( short *km, short *o, Boolean *prompt, FSSpec *fs)
  55. {
  56.     if ( w_end  == w_start )
  57.         return kWorkEndErr;
  58.     
  59.     w_start = next_w( w_start );
  60.     
  61.     
  62.     *km =         (*Work[w_start])->KeysMode;
  63.     *o =        (*Work[w_start])->Op;
  64.     *prompt =    (*Work[w_start])->Prompt;
  65.     *fs =        (*Work[w_start])->fs;
  66.  
  67.     DisposeHandle((Handle)Work[w_start]);
  68.  
  69.     err = MemError();
  70.  
  71.     return err;
  72. }
  73.  
  74. void reset_work(void)
  75. {
  76.     err = noErr;
  77.     
  78.     while ((  w_end  != w_start ) && ( err == noErr ))
  79.     {
  80.         w_start = next_w( w_start );
  81.         DisposeHandle((Handle)Work[w_start]);
  82.         err = MemError();
  83.     }
  84.     w_start    = w_end    = 0;
  85. }
  86.  
  87. /************************************************************************************
  88.  */
  89.  
  90. static int next_w ( int i )
  91. {
  92.     if ( ++i == MAX_WORKS )
  93.         i = 0;
  94.     return i;
  95. }